var currentTip = null;
var currentTipElement = null;

function hideTip(evt, name, unique)
{
  var el = document.getElementById(name);
  el.style.display = "none";
  currentTip = null;
}

function findPos(obj)
{
  // no idea why, but it behaves differently in webbrowser component
  if (window.location.search == "?inapp")
    return [obj.offsetLeft + 10, obj.offsetTop + 30];

  var curleft = 0;
  var curtop = obj.offsetHeight;
  while (obj)
  {
    curleft += obj.offsetLeft;
    curtop += obj.offsetTop;
    obj = obj.offsetParent;
  };
  return [curleft, curtop];
}

function hideUsingEsc(e)
{
  if (!e) { e = event; }
  hideTip(e, currentTipElement, currentTip);
}

function showTip(evt, name, unique)
{
  document.onkeydown = hideUsingEsc;
  if (currentTip == unique) return;
  currentTip = unique;
  currentTipElement = name;

  var pos = findPos(evt.srcElement ? evt.srcElement : evt.target);
  var posx = pos[0];
  var posy = pos[1];

  var el = document.getElementById(name);
  var parent = (document.documentElement == null) ? document.body : document.documentElement;
  el.style.position = "absolute";
  el.style.left = posx + "px";
  el.style.top = posy + "px";
  el.style.display = "block";
}